package com.hundsun.s3.mrs.core.task;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import com.hundsun.s3.mrs.core.type.TaskType;

/**
 * 全局Task管理器
 * @author chenji23607
 *
 */
public class TaskManager {
	
	public static void clearAll() {
		TaskManager.setSendTask(new LinkedList<Task>());
		TaskManager.setSrTask(new LinkedList<Task>());
		TaskManager.setCloseTask(new LinkedList<Task>());
		TaskManager.setEvaluateTask(new LinkedList<Task>());
		TaskManager.setRedirectTask(new LinkedList<Task>());
	}
	
	public static List<Task> getAll() {
		List<Task> all = new ArrayList<>();
		all.addAll(sendTask);
		all.addAll(srTask);
		all.addAll(closeTask);
		all.addAll(evaluateTask);
		all.addAll(closeTask);
		return all;
	}
	
	/**
	 * 根据类型获取任务列表
	 * @param type 任务类型，如果type为空，则返回null
	 * @return
	 */
	public static List<Task> get(String type) {
		switch (type) {
		case TaskType.TASK_SEND:
			return sendTask;
		case TaskType.TASK_SR:
			return srTask;
		case TaskType.TASK_CLOSE:
			return closeTask;
		case TaskType.TASK_EVALUATE:
			return evaluateTask;
		case TaskType.TASK_REDIRECT:
			return redirectTask;
		default:
			return null;
		}
	}
	
	/**
	 * 发送任务的管理器
	 */
	private static List<Task> sendTask = new LinkedList<Task>();
	
	/**
	 * SR咨询请求
	 */
	private static List<Task> srTask = new LinkedList<Task>();
	
	/**
	 * 评价任务的管理器
	 */
	private static List<Task> evaluateTask = new LinkedList<Task>();
	/**
	 * 转发任务的管理器
	 */
	private static List<Task> redirectTask = new LinkedList<Task>();
	
	/**
	 * 关闭任务的管理器
	 */
	private static List<Task> closeTask = new LinkedList<Task>();

	public static List<Task> getSendTask() {
		return sendTask;
	}

	public static void setSendTask(List<Task> sendTask) {
		TaskManager.sendTask = sendTask;
	}

	public static List<Task> getSrTask() {
		return srTask;
	}

	public static void setSrTask(List<Task> srTask) {
		TaskManager.srTask = srTask;
	}

	public static List<Task> getEvaluateTask() {
		return evaluateTask;
	}

	public static void setEvaluateTask(List<Task> evaluateTask) {
		TaskManager.evaluateTask = evaluateTask;
	}

	public static List<Task> getRedirectTask() {
		return redirectTask;
	}

	public static void setRedirectTask(List<Task> redirectTask) {
		TaskManager.redirectTask = redirectTask;
	}

	public static List<Task> getCloseTask() {
		return closeTask;
	}

	public static void setCloseTask(List<Task> closeTask) {
		TaskManager.closeTask = closeTask;
	}

}
